#ifndef THREADPOOL_H
#define THREADPOOL_H

#include <pthread.h>
#include <stddef.h>

#define TASK_QUEUE_SIZE 1024

// 任务结构体
typedef struct ThreadTask {
    void (*function)(void* arg);
    void* arg;
} ThreadTask;

// 线程池结构体
typedef struct ThreadPool {
    pthread_t* threads;           // 工作线程数组
    int thread_count;             // 线程数量

    ThreadTask task_queue[TASK_QUEUE_SIZE]; // 循环队列
    int queue_front;              // 出队指针
    int queue_rear;               // 入队指针
    int queue_size;               // 当前队列元素个数

    pthread_mutex_t lock;         // 队列互斥锁
    pthread_cond_t not_empty;     // 队列非空条件变量
    pthread_cond_t not_full;      // 队列未满条件变量
    int stop;                     // 停止标志
} ThreadPool;

// 创建线程池
ThreadPool* threadpool_create(int thread_count);

// 销毁线程池
void threadpool_destroy(ThreadPool* pool);

// 向线程池投递任务
int threadpool_add(ThreadPool* pool, void (*function)(void*), void* arg);

#endif
